package br.com.fogas.database.dao.impl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.fogas.database.FogasDatabase;
import br.com.fogas.database.IMetadata;
import br.com.fogas.database.IMetadata.ICliente;
import br.com.fogas.database.dao.IMedidorHistorico;
import br.com.fogas.database.entidade.Cliente;
import br.com.fogas.database.entidade.MedidorHistorico;
import br.com.fogas.database.enums.MedidorEventoEnum;
import br.com.fogas.webservice.parser.cliente.T_Medidor_Hist_Item;

import com.j256.ormlite.dao.BaseDaoImpl;
import com.j256.ormlite.stmt.QueryBuilder;

public class MedidorHistDao extends BaseDaoImpl<MedidorHistorico, Integer> implements IMedidorHistorico {

	private FogasDatabase database;
	
	public MedidorHistDao(FogasDatabase database) throws SQLException {
		super(database.getConnectionSource(), MedidorHistorico.class);
		this.database = database;
	}
	
	@Override
	public void sincronizar(List<T_Medidor_Hist_Item> medidores) throws SQLException {
		for (T_Medidor_Hist_Item item : medidores) {
			List<Cliente> cliente = database.getCliente().queryForEq(ICliente.tx_cod_cliente, item.getCLIENTE());
			if(cliente != null && cliente.size() == 1) {
				MedidorHistorico historico = new MedidorHistorico(item, cliente.get(0), null);
				create(historico);
			} else {
				String msg = "Cliente n�o encontrado para o medidor historico "+item.getCOD_MEDIDOR();
				throw new SQLException(msg);
			}
		}
	}

	@Override
	public List<MedidorHistorico> listarHistoricoMedicaoPorCliente(
			Cliente cliente) throws SQLException {
		List<String> params = new ArrayList<String>();
		params.add(MedidorEventoEnum.TROCA.getId());
		
		QueryBuilder<MedidorHistorico, Integer> qb = queryBuilder();
		qb.where()
		.eq(IMetadata.IMedidorHistorico.tx_cod_cliente, cliente)
		.and().notIn(IMetadata.IMedidorHistorico.tx_status, params);
		//desc
		qb.orderBy(IMetadata.IMedidorHistorico.ts_ult_leitura, false);
		
		List<MedidorHistorico> historico = qb.query();
		return historico;
	}
}